#include "delay.h"

/* 延时 定时器初始化 */
void Delay_TIM_Init(void)
{
    // 使能 TIM2 时钟
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

    // 配置预分频器，实现 1MHz 计数频率
    TIM2->PSC = 72 - 1; // 72MHz / 72 = 1MHz

    // 设置计数器模式为向上计数
    TIM2->CR1 &= ~TIM_CR1_DIR;

    // 设置自动重载值为最大值
    TIM2->ARR = 0xFFFFFFFF;

    // 清除更新标志位
    TIM2->SR &= ~TIM_SR_UIF;

    // 使能定时器
    TIM2->CR1 |= TIM_CR1_CEN;
}
// 微秒级延时(使用TIM2)
void Delay_us(uint32_t us)
{
    uint32_t tickstart = TIM2->CNT;
    while ((TIM2->CNT - tickstart) < us)
        ;
}

// 毫秒级延时(基于Delay_us)
void Delay_ms(uint32_t ms)
{
    while (ms--)
    {
        Delay_us(1000);
    }
}